package com.ssy.lingxi.purchase.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.purchase.api.dto.request.CommonIdRequest;
import com.ssy.lingxi.purchase.model.request.*;
import com.ssy.lingxi.purchase.model.response.*;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * @menu 采购能力-采购请购单相关接口
 * @author wyx
 * @version 2.0.0
 * @date 2021-10-27
 */
public interface IPurchaseRequisitionService {
    /**
     * 分页查询请购单
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RequisitionPageRes>> getPage(UserLoginCacheDTO loginUser, RequisitionPageReq req);

    /**
     * 待新增请购单-分页查询
     * @param req 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RequisitionPageRes>> getCreatePage(UserLoginCacheDTO loginUser, RequisitionPageReq req);

    /**
     * 待审核请购单(一级)-分页查询
     * @param req 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RequisitionPageRes>> getFirstAuditPage(UserLoginCacheDTO loginUser, RequisitionPageReq req);

    /**
     * 待审核请购单(二级)-分页查询
     * @param req 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RequisitionPageRes>> getTwoAuditPage(UserLoginCacheDTO loginUser, RequisitionPageReq req);

    /**
     * 待提交请购单-分页查询
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RequisitionPageRes>> getSubmitPage(UserLoginCacheDTO loginUser, RequisitionPageReq req);

    /**
     * 创建采购请购单
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 操作结果
     */
    Wrapper<Void> create(UserLoginCacheDTO loginUser, RequisitionReq req);

    /**
     * 修改请购单
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 操作结果
     */
    Wrapper<Void> update(UserLoginCacheDTO loginUser, RequisitionUpdateReq req);

    /**
     * 采购请购单详情
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 查询结果
     */
    Wrapper<RequisitionDetailRes> getDetail(UserLoginCacheDTO loginUser, CommonIdRequest req);

    /**
     * 删除请购单
     * @param req 接口参数
     * @return 查询结果
     */
    Wrapper<Void> delete(UserLoginCacheDTO loginUser, CommonIdRequest req);

    /**
     * 中止采购请购单
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 查询结果
     */
    Wrapper<RequisitionDetailRes> pause(UserLoginCacheDTO loginUser, RequisitionInnerStatusReq req);

    /**
     * 取消采购请购单
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 查询结果
     */
    Wrapper<RequisitionDetailRes> cancel(UserLoginCacheDTO loginUser, RequisitionInnerStatusReq req);

    /**
     * 待新增请购单-提交审核
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 查询结果
     */
    Wrapper<Void> submitAudit(UserLoginCacheDTO loginUser, CommonIdRequest req);

    /**
     * 待审核请购单一级-审核
     * @param req 接口参数
     * @return 操作结果
     */
    Wrapper<Void> firstAudit(UserLoginCacheDTO loginUser, RequisitionAuditReq req);

    /**
     * 待审核请购单二级-审核
     * @param req 接口参数
     * @return 操作结果
     */
    Wrapper<Void> twoAudit(UserLoginCacheDTO loginUser, RequisitionAuditReq req);

    /**
     * 待提交请购单-提交
     * @param req 接口参数
     * @return 操作结果
     */
    Wrapper<Void> submit(UserLoginCacheDTO loginUser, CommonIdRequest req);

    /**
     * 查询请购单内部状态枚举值
     * @return 查询结果
     */
    Wrapper<List<RequisitionInnerStatusEnumRes>> findInnerStatusEnum();

    /**
     * 待请购单转采购订单-分页查询
     * @param loginUser 登录用户信息
     * @param req       接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RequisitionPageRes>>  getTransferPurchasePage(UserLoginCacheDTO loginUser, RequisitionPageReq req);

    /**
     * 转采购订单-查看详情
     * @param loginUser 登录用户信息
     * @param req 接口参数
     * @return 查询结果
     */
    Wrapper<TransferPurchaseDetailRes> getTransferPurchaseDetail(UserLoginCacheDTO loginUser, CommonIdRequest req);

    /**
     * 新增请购单订单-选择采购物料列表
     * @param loginUser 登录用户信息
     * @param req 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MaterialPageRes>> getOrderPurchaseMaterialPage(UserLoginCacheDTO loginUser, MaterialPageReq req);

    /**
     * 查询配送方式枚举
     * @param headers
     * @return
     */
    Wrapper<PurchaseDeliveryTypeItemRes> getDeliveryMethodItems(HttpHeaders headers);
}
